_S_C_G_e_t_D_a_t_a_T_y_p_e_s sets *_d_t to point to an array of the data types supported
by the scanner driver. *_n_t_y_p_e_s gets the number of data types pointed to
by *_d_t. _s specifies a connection to a scanner driver obtained from a
call to _S_C_O_p_e_n(3), _S_C_O_p_e_n_F_i_l_e(3), or _S_C_O_p_e_n_S_c_r_e_e_n(3).
_S_C_D_A_T_A_T_Y_P_E is defined in <_s_c_a_n_n_e_r._h> as follows:
typedef struct tag_scdatatype {
unsigned int packing : 4;
unsigned int channels : 4;
unsigned int type : 8;
unsigned int bpp : 8;
} SCDATATYPE;
_p_a_c_k_i_n_g indicates how the data for each pixel is laid out. Its value
will be one of SSSSCCCC____PPPPAAAACCCCKKKKPPPPIIIIXXXX, SSSSCCCC____PPPPAAAACCCCKKKKBBBBAAAANNNNDDDD, or SSSSCCCC____PPPPAAAACCCCKKKKPPPPLLLLAAAANNNNEEEE, which are
defined in <_s_c_a_n_n_e_r._h>. If _p_a_c_k_i_n_g is SSSSCCCC____PPPPAAAACCCCKKKKPPPPIIIIXXXX, then all the data for
each pixel is together. If _p_a_c_k_i_n_g is SSSSCCCC____PPPPAAAACCCCKKKKBBBBAAAANNNNDDDD then the data is
banded by row, and if _p_a_c_k_i_n_g is SSSSCCCC____PPPPAAAACCCCKKKKPPPPLLLLAAAANNNNEEEE then the data is laid out
in planes (see below).
_c_h_a_n_n_e_l_s is the number of channels of data for this type. Black and
white data (SSSSCCCC____MMMMOOOONNNNOOOO, SSSSCCCC____GGGGRRRREEEEYYYY) consists of one channel, while color data
consists of three (SSSSCCCC____RRRRGGGGBBBB, SSSSCCCC____CCCCMMMMYYYY) or four (SSSSCCCC____CCCCMMMMYYYYKKKK).
_t_y_p_e is used to interpret the channels of data. _t_y_p_e should be one of
SSSSCCCC____MMMMOOOONNNNOOOO, SSSSCCCC____GGGGRRRREEEEYYYY, SSSSCCCC____RRRRGGGGBBBB, SSSSCCCC____CCCCMMMMYYYY, or SSSSCCCC____CCCCMMMMYYYYKKKK, which are defined in
<_s_c_a_n_n_e_r._h>.
_b_p_p is the number of bits per pixel in each channel. Thus, for
monochrome data, there is 1 bit per pixel, and for 24 bit RGB color,
there are 8 bits per pixel (* 3 channels == 24 bits).